package day_02_03_ClassLoader;


class Demo{
    public Demo(){
        System.out.println("Demo 构造方法");
    }

    {
        System.out.println("Demo 构造代码块");
    }

    static {
        System.out.println("Demo 静态代码块");
    }
}

/**
 * @Description 配合 ClassLoader 一起，理解一下类加载的顺序问题
 * @Author shihan
 * @Date 2020/11/21 17:11
 * @Version 1.0
 */
public class ClassLoaderDemo {

    static {
        System.out.println("ClassLoaderDemo 静态代码块");
    }

    public ClassLoaderDemo(){
        System.out.println("ClassLoaderDemo 构造方法");
    }

    {
        System.out.println("ClassLoaderDemo 构造代码块");
    }

    public static void main(String[] args) {
        System.out.println("===========美丽的分割线===========");
        new Demo();
        System.out.println("---------------------------------");
        new Demo();
        System.out.println("---------------------------------");
        new ClassLoaderDemo();
    }
}
/**
 *【总结】：
 * 1、类加载以 main 方法为起点，即先加载 main 方法所在的那个类；
 * 2、然后在 main 方法中具体使用到某些 类 时，类加载器才会把该类加载到 JVM 的方法区中；
 *【类加载顺序】：
 * 1、静态代码块(仅加载一次)；
 * 2、构造代码块(构造代码块的执行，总是优先于构造方法)；
 * 3、构造方法；
 */
